/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package futbol.tacticas.concursantes.aitkiar.aitutil;

import futbol.tacticas.Comando;
import futbol.tacticas.ComandoGolpearBola;
import futbol.tacticas.ComandoIrA;
import futbol.tacticas.ComandoTiroAPuerta;
import futbol.tacticas.SituacionJugadores;
import java.awt.Point;

/**
 *
 * @author aitkiar
 */
public class Delantero extends Jugador
{

    public Delantero( int x, int y, int fuerza, int numero )
    {
        super( x, y, fuerza, numero );
    }

    @Override
    public Comando getComando( SituacionJugadores sj )
    {
        Point bola;
        Comando comando;

        posicion = sj.getMisJugadores()[numero];
        if ( Utils.disparo( posicion, sj ) )
        {
            comando = new ComandoTiroAPuerta( numero, mejorDisparo( sj ) );
            //System.out.println( "Disparo" );
        }
        else if ( campo.getJugadorMasCercanoBola() == numero )
        {
            bola = sj.getBola();
            comando = new ComandoIrA( this.numero, bola.getX(), bola.getY() );
        }
        else if ( notificacionPase > 0 && puntoPase != null )
        {
            notificacionPase--;
            comando = new ComandoIrA( this.numero, puntoPase.getX(), puntoPase.getY() );
        }
        else
        {
            Point desmarque = getMejorDesmarque( sj );
            if ( desmarque == null )
            {
                desmarque = new Point( x, y );
            }
            comando = new ComandoIrA( this.numero, desmarque.x, desmarque.y );
            notificacionPase = 0;
            puntoPase = null;
        }
        return comando;
    }

    /** Los delanteros deben desmarcarse hacia adelante, teniendo en cuenta siempre la menor
     *  distancia a la bola y con menor variación en y.
     * @param sj
     * @param zona
     * @return
     */
    public int heuristicaDesmarqueClase( SituacionJugadores sj, ZonaCampo zona )
    {
        int heuristica = 0;
        double distanciaBola = Utils.distancia( zona.pase, sj.getBola());
        heuristica += zona.pase.x - posicion.x;
        if ( distanciaBola > 40  && sj.getBola().x > 100 )
        {
            heuristica -= distanciaBola;
        }
        if ( zona.pase.x > 135 )
        {
            heuristica -= 100;
        }
        heuristica -= Math.abs( zona.pase.y - y );
        
        return heuristica;
    }

    @Override
    public int heuristicaPaseClase( SituacionJugadores sj, ZonaCampo zona )
    {
        return 0;
    }
}
